home *** CD-ROM | disk | FTP | other *** search
- // TPGPUAMPrefs.cp - Preference Object
- //
- // Apple Macintosh Developer Technical Support
- // Written by: Vinnie Moscaritolo
- //
- // Copyright (work in progress) Apple Computer, Inc All rights reserved.
- //
- // You may incorporate this sample code into your applications without
- // restriction, though the sample code has been provided "AS IS" and the
- // responsibility for its operation is 100% yours. However, what you are
- // not permitted to do is to redistribute the source as "DSC Sample Code"
- // after having made changes. If you're going to re-distribute the source,
- // we require that you make it clear in the source that the code was
- // descended from Apple Sample Code, but that you've made changes.
- //
-
- #include <PLStringFuncs.h>
- #include <string.h>
- #include <Files.h>
-
- #include "TPGPUAMPrefs.h"
- #include "TMacException.h"
-
- //------------------------------------------------------------------------------------
- #pragma mark Local-Prototypes
- //------------------------------------------------------------------------------------
- static OSErr get_prefs_name (StringPtr prefName);
-
- //------------------------------------------------------------------------------------
- #pragma mark Local-Defines
- //------------------------------------------------------------------------------------
- #define kPrefsNameStrID 128 /* name of prefs file */
-
-
- //#define kPrefFolderName "\pPretty Good Preferences" /* name of Pref folder */
- #define kPrefFolderName "\pPretty Mediocre Preferences" /* name of Pref folder */
- #define kPrefsResourceName "\pPGPuam Prefs"
-
- //------------------------------------------------------------------------------------
- #pragma mark -
-
-
- // ---------------------------------------------------------------------------
- static OSErr get_prefs_name (StringPtr prefName)
- // ---------------------------------------------------------------------------
- //
- // get the name of the preferences file from a resource in the application
- //
- //
- {
- StringHandle prefStrHandle;
- OSErr ErrNo = noErr;
-
- prefStrHandle = GetString(kPrefsNameStrID);
- if (prefStrHandle != nil)
- BlockMove(*prefStrHandle, prefName, (Size) (**prefStrHandle) + 1);
- else ErrNo = resNotFound;
-
- return ErrNo;
- }
-
- // ---------------------------------------------------------------------------
- OSErr TPGPUAMPrefs::GetPrefSpec( FSSpec *fss )
- // ---------------------------------------------------------------------------
- //
- {
- Str255 prefsNameStr;
- Str255 prefsFolderStr;
- FSSpec prefsFSS;
- CInfoPBRec cpb;
- OSErr err = noErr;
-
- short prefsVRefNum;
- long prefsDirID;
-
- // get the name of the prefs file
- ThrowIfMacErr( get_prefs_name(prefsNameStr));
-
- // find the pref folder
- ThrowIfMacErr( FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, &prefsFSS.vRefNum, &prefsFSS.parID ));
-
- // look for subfolder
- prefsVRefNum = prefsFSS.vRefNum;
- PLstrcpy(prefsFSS.name, kPrefFolderName);
-
- memset(&cpb, 0, sizeof cpb);
- cpb.hFileInfo.ioVRefNum = prefsFSS.vRefNum;
- cpb.hFileInfo.ioDirID = prefsFSS.parID;
- cpb.hFileInfo.ioNamePtr = prefsFSS.name;
-
- if (PBGetCatInfoSync( &cpb ) == noErr)
- {
- if( (cpb.hFileInfo.ioFlAttrib & ioDirMask ) != 0 )
- {
- prefsDirID = cpb.dirInfo.ioDrDirID;
- }
- else
- {
- return (dupFNErr); // "Pretty Good Preferences is a file!"
- }
- }
- else
- {
- ThrowIfMacErr( FSpDirCreate( &prefsFSS, smSystemScript, &prefsDirID ));
- }
-
-
- // make a file spec for the prefs file
- err = FSMakeFSSpec(prefsVRefNum, prefsDirID, prefsNameStr, fss);
- return ( err );
- }
-
-
- #define kFinderMessageStrID -16397 /* ID of STR for default finder message */
- #define kStrType 'STR '
-
-
- // ---------------------------------------------------------------------------
- OSErr TPGPUAMPrefs::CreatePrefFile(FSSpec *fss)
- // ---------------------------------------------------------------------------
- //
- {
- // write pref file
-
- short prefsResRefNum;
- Handle versHandle;
- Handle finderMessageHandle;
- OSErr ErrNo = noErr;
-
- FSpCreateResFile(fss, '????' ,kPrefsFileType ,smSystemScript);
- if(!(ErrNo = ResError()))
- {
- prefsResRefNum = FSpOpenResFile(fss, fsWrPerm);
-
- /* add the message to be displayed if the user tries
- to open the prefs file in the Finder (but don't add it
- if it's already in the preferences file) */
-
- finderMessageHandle = (Handle) GetString(kFinderMessageStrID);
- if (finderMessageHandle != nil &&
- HomeResFile((Handle) finderMessageHandle) != prefsResRefNum) {
-
- // copy the resource into the prefs file
- DetachResource(finderMessageHandle);
- AddResource(finderMessageHandle, kStrType, kFinderMessageStrID,"\pFinder message");
-
- // if AddResource failed, dispose of the handle
- ErrNo = ResError();
- if (ErrNo != noErr) DisposeHandle(finderMessageHandle);
- }
-
- versHandle = (Handle) GetResource('vers', 1);
- if (versHandle != nil &&
- HomeResFile((Handle) versHandle) != prefsResRefNum)
- {
- // copy the resource into the prefs file
- DetachResource(versHandle);
- AddResource(versHandle, 'vers', 1, nil);
-
- // if AddResource failed, dispose of the handle
- ErrNo = ResError();
- if (ErrNo != noErr) DisposeHandle(versHandle);
- }
-
- versHandle = (Handle) GetResource('vers', 2);
- if (versHandle != nil &&
- HomeResFile((Handle) versHandle) != prefsResRefNum)
- {
- // copy the resource into the prefs file
- DetachResource(versHandle);
- AddResource(versHandle, 'vers', 2, nil);
-
- // if AddResource failed, dispose of the handle
- ErrNo = ResError();
- if (ErrNo != noErr) DisposeHandle(versHandle);
- }
-
- // update and close the preference resource file
- CloseResFile(prefsResRefNum);
- }
- return ErrNo;
- }
-
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::Finalize()
- // ---------------------------------------------------------------------------
- //
- {
- if(fDirty)
- {
- Set( 'disl', 0, sizeof( Boolean), &fDisclosureState);
- Set( 'cach', 0, sizeof( Boolean), &fCachePassPhrase);
- Set( 'ctim', 0, sizeof( SInt16), &fCachePassPhraseTimeLimit);
- Set( 'asrv', 0, sizeof( Boolean), &fAuthenticateServer);
- Set( 'opt1', 0, sizeof( Boolean), &fOption1);
- Set( 'opt2', 0, sizeof( Boolean), &fOption2);
- Write();
- }
-
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::Initialize()
- // ---------------------------------------------------------------------------
- //
- {
- Read();
- if( Get('disl',0, 0, &fDisclosureState) != noErr) fDisclosureState = false;
- if( Get('cach',0, 0, &fCachePassPhrase) != noErr) fCachePassPhrase = false;
- if( Get('ctim',0, 0, &fCachePassPhraseTimeLimit) != noErr) fCachePassPhraseTimeLimit = 0;
- if( Get('asrv',0, 0, &fAuthenticateServer) != noErr) fAuthenticateServer = true;
- if( Get('opt1',0, 0, &fOption1) != noErr) fOption1 = true;
- if( Get('opt2',0, 0, &fOption2) != noErr) fOption2 = true;
- }
-
-
- // ---------------------------------------------------------------------------
- Boolean TPGPUAMPrefs::GetDisclosureState()
- // ---------------------------------------------------------------------------
- //
- {
- return fDisclosureState;
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::SetDisclosureState(Boolean flag)
- // ---------------------------------------------------------------------------
- //
- {
- fDisclosureState = flag ;
- fDirty= true;
- }
-
-
- // ---------------------------------------------------------------------------
- Boolean TPGPUAMPrefs::GetCachePassPhrase()
- // ---------------------------------------------------------------------------
- //
- {
- return fCachePassPhrase;
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::SetCachePassPhrase(Boolean flag)
- // ---------------------------------------------------------------------------
- //
- {
- fCachePassPhrase = flag ;
- fDirty= true;
- }
-
-
- // ---------------------------------------------------------------------------
- Boolean TPGPUAMPrefs::GetAuthenticateServer()
- // ---------------------------------------------------------------------------
- //
- {
- return fAuthenticateServer;
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::SetAuthenticateServer(Boolean flag)
- // ---------------------------------------------------------------------------
- //
- {
- fAuthenticateServer = flag ;
- fDirty= true;
- }
-
-
- // ---------------------------------------------------------------------------
- Boolean TPGPUAMPrefs::GetOption1()
- // ---------------------------------------------------------------------------
- //
- {
- return fOption1;
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::SetOption1(Boolean flag)
- // ---------------------------------------------------------------------------
- //
- {
- fOption1 = flag ;
- fDirty= true;
- }
-
- // ---------------------------------------------------------------------------
- Boolean TPGPUAMPrefs::GetOption2()
- // ---------------------------------------------------------------------------
- //
- {
- return fOption2;
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::SetOption2(Boolean flag)
- // ---------------------------------------------------------------------------
- //
- {
- fOption2 = flag ;
- fDirty= true;
- }
-
-
-
-
- // ---------------------------------------------------------------------------
- SInt16 TPGPUAMPrefs::GetCachePassPhraseTimeLimit()
- // ---------------------------------------------------------------------------
- //
- {
- return fCachePassPhraseTimeLimit;
- }
-
- // ---------------------------------------------------------------------------
- void TPGPUAMPrefs::SetCachePassPhraseTimeLimit(SInt16 value)
- // ---------------------------------------------------------------------------
- //
- {
- fCachePassPhraseTimeLimit = value ;
- fDirty= true;
- }
-
-
-
-